'''
Copyright(C),2021-2031, Zhenxin Tech. Co., Ltd.

FilePath: client.py
Author: zhangys
Date: 1969-12-31 16:00:00
LastEditTime: 2021-12-14 19:21:16
LastEditors: zhangys
Description: 服务客户端
'''

import sys
from example_interfaces.srv import AddTwoInts
import rclpy
from rclpy.node import Node

class Client(Node):
    def __init__(self):
        super().__init__('zys_client_async')
        self.cli=self.create_client(AddTwoInts,'zys_add')
        while not self.cli.wait_for_service(timeout_sec=1.0):#循环每秒检查一次与客户端的类型和名称匹配的服务是否可用。
            self.get_logger().info('服务不可用，等待中...')
        self.req=AddTwoInts.Request()
    def sendRequest(self):
        self.req.a=int(sys.argv[1]) #客户端节点代码使用sys.argv来访问请求的命令行输入参数。
        self.req.b=int(sys.argv[2])
        self.future=self.cli.call_async(self.req)

def main(args=None):
    rclpy.init(args=args)
    zys_client=Client()
    zys_client.sendRequest()
    while rclpy.ok(): #future只要系统正在运行，循环就会检查是否有来自服务的响应 如果服务已发送响应，则结果将写入日志消息。
        rclpy.spin_once(zys_client) 
        if zys_client.future.done():
            try:
                response=zys_client.future.result()
            except Exception as e:
                zys_client.get_logger().info('服务调用失败%r'%(e,))
            else:
                zys_client.get_logger().info('结果是：%d+%d=%d'%(zys_client.req.a,zys_client.req.b,response.sum))
            break
    zys_client.destroy_node()
    rclpy.shutdown()


if __name__ == '__main__':
    main()